home *** CD-ROM | disk | FTP | other *** search
- #include "win.h"
-
- move(w, x, y)
- struct window *w;
- int x, y;
- {
- char work[MAXSIZE];
- int ox, oy, ox2, oy2, x2, y2;
- extern void expose(), save(), memcpy(), show();
-
- ox = w->x;
- oy = w->y;
- ox2 = w->x2;
- oy2 = w->y2;
- x2 = x + w->w - 1;
- y2 = y + w->h - 1;
- if (!w->mapped){
- w->x = x;
- w->y = y;
- w->x2 = x2;
- w->y2 = y2;
- return (0);
- }
- if (oy <= y2 && y2 <= oy2){
- if (ox <= x2 && x2 < ox2)
- expose(work, w, x2+1, oy, ox2, y2);
- else if (ox < x && x <= ox2)
- expose(work, w, ox, oy, x-1, y2);
- else
- goto NONOVERLAP;
- expose(work, w, ox, y2+1, ox2, oy2);
- } else if (oy <= y && y <= oy2){
- if (ox <= x2 && x2 < ox2)
- expose(work, w, x2+1, y, ox2, oy2);
- else if (ox < x && x <= ox2)
- expose(work, w, ox, y, x-1, oy2);
- else
- goto NONOVERLAP;
- expose(work, w, ox, oy, ox2, y-1);
- } else {
- NONOVERLAP:
- expose(work, w, ox, oy, ox2, oy2);
- }
-
- save(work, x, y, x2, y2);
- memcpy(w->save, work, w->size);
- w->x = x;
- w->y = y;
- w->x2 = x2;
- w->y2 = y2;
- show(work, w);
- return (0);
- }
-